package com.shlh.saas.service.facebook;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shlh.saas.entity.facebook.FacebookUser;
import com.shlh.saas.entity.facebook.FacebookUserEs;
import com.shlh.saas.model.dto.FacebookQueryDTO;

import java.util.List;
import java.util.Map;

/**
 * Facebook Elasticsearch服务接口
 * 提供ES查询和两阶段查询功能
 */
public interface FacebookEsService {

    Page<FacebookUserEs> queryFacebookUserList(FacebookUserEs facebookUserEs);

    Map<String, List<String>> queryFacebookUserMapList(FacebookUserEs facebookUserEs);

    // ==================== 两阶段查询方法 ====================

    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据姓名和工作地点在ES中查找匹配记录的标识信息
     *
     * @param firstName 名字
     * @param lastName 姓氏
     * @param workplace 工作地点
     * @param limit 最大返回数量，默认50
     * @return 包含mysqlTable和id的轻量级结果列表
     */
    List<Map<String, String>> searchByNameAndWorkplace(String firstName, String lastName, String workplace, int limit);

    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据姓名和邮箱在ES中查找匹配记录的标识信息
     *
     * @param firstName 名字
     * @param lastName 姓氏
     * @param email 邮箱
     * @param limit 最大返回数量，默认50
     * @return 包含mysqlTable和id的轻量级结果列表
     */
    List<Map<String, String>> searchByNameAndEmail(String firstName, String lastName, String email, int limit);

    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据手机号和姓名在ES中查找匹配记录的标识信息
     *
     * @param phoneNumber 手机号
     * @param firstName 名字
     * @param lastName 姓氏
     * @param limit 最大返回数量，默认50
     * @return 包含mysqlTable和id的轻量级结果列表
     */
    List<Map<String, String>> searchByPhoneAndName(String phoneNumber, String firstName, String lastName, int limit);

    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据邮箱精确匹配在ES中查找记录标识信息
     *
     * @param email 邮箱
     * @param limit 最大返回数量，默认50
     * @return 包含mysqlTable和id的轻量级结果列表
     */
    List<Map<String, String>> searchByEmail(String email, int limit, int size);


    List<Map<String, String>> searchByPhone(String phone, int size, int offset);

    // ==================== 导出功能两阶段查询方法 ====================

    /**
     * 两阶段查询第一阶段：ES快速检索（用于数据导出）
     * 根据复杂筛选条件在ES中查找匹配记录的标识信息
     *
     * @param queryDTO 查询条件DTO
     * @param limit 最大返回数量
     * @return 包含mysqlTable和id的轻量级结果列表
     */
    List<Map<String, String>> searchForExport(FacebookQueryDTO queryDTO, int limit);

    /**
     * 两阶段查询第一阶段：ES快速检索（用于数据导出，支持分页）
     * 根据复杂筛选条件在ES中查找匹配记录的标识信息，支持分页查询
     *
     * @param queryDTO 查询条件DTO
     * @param from 起始位置
     * @param size 查询数量
     * @return 包含mysqlTable和id的轻量级结果列表
     */
    List<Map<String, String>> searchForExportWithPagination(FacebookQueryDTO queryDTO, int from, int size);

    /**
     * 获取ES查询结果总数（用于导出前的数量预估）
     *
     * @param queryDTO 查询条件DTO
     * @return 匹配记录总数
     */
    long countForExport(FacebookQueryDTO queryDTO);

    List<FacebookUserEs> searchFacebookUsersWithEmail(String searchKeyword, int offset, int size);

    Long countFacebookUsersWithEmail(String searchKeyword);

    List<FacebookUserEs> searchFacebookUsersWithPhone(String searchKeyword, int offset, int size);

    Long countFacebookUsersWithPhone(String searchKeyword);

    long countByEmail(String email);

    long countByPhone(String phone);

    List<String> searchCurrent(String current);

    List<String> searchHometown(String hometowm);

    List<String> searchWorkplaces(String workplace);

    List<FacebookUserEs> searchFacebookDataWithPhone(String companyName, String fullName);

    List<FacebookUserEs> searchFacebookDataWithEmail(String companyName, String fullName);
}
